namespace vue0701.Domain.Entities.App;

public class AppRole : EntityBase
{
      public string Name { get; private set; }
    private readonly List<AppRolePermission> _rolePermissions = new();
    public IReadOnlyCollection<AppRolePermission> RolePermissions => _rolePermissions.AsReadOnly();

#pragma warning disable CS8618 // 在退出构造函数时，不可为 null 的字段必须包含非 null 值。请考虑添加 "required" 修饰符或声明为可为 null。
    protected AppRole() { }
#pragma warning restore CS8618 // 在退出构造函数时，不可为 null 的字段必须包含非 null 值。请考虑添加 "required" 修饰符或声明为可为 null。
    public AppRole(string name)
    {
        Name = name;
    }

    // 分配权限
    public void GrantPermission(AppPermission permission)
    {
        if (_rolePermissions.Any(rp => rp.PermissionId == permission.Id)) return;
        _rolePermissions.Add(new AppRolePermission(this, permission));
    }

    //收回权限
    public void RevokePermission(AppPermission permission)
    {
        var rp = _rolePermissions.FirstOrDefault(rp => rp.PermissionId == permission.Id);
        if (rp != null) _rolePermissions.Remove(rp);
    }

    // 判断权限
    public bool HasPermission(string permissionName)
    {
        return _rolePermissions.Any(rp => rp.Permission.Name == permissionName);
    }
}